From: kaf24@firebug.cl.cam.ac.uk Date: Fri, 9 Jun 2006 15:26:05 +0000 (+0100) Subject: [XEN][ACM] Clean up ACM interface to use explicitly-sized types X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15972^2~23 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:///%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:/?a=commitdiff_plain;h=abb88790d2e4c7b03f488d052e1fcc22796f4d75;p=xen.git [XEN][ACM] Clean up ACM interface to use explicitly-sized types and guest handles. Signed-off-by: Hollis Blanchard --- diff --git a/tools/python/xen/lowlevel/acm/acm.c b/tools/python/xen/lowlevel/acm/acm.c index 8be533f914..7d5df4f3d5 100644 --- a/tools/python/xen/lowlevel/acm/acm.c +++ b/tools/python/xen/lowlevel/acm/acm.c @@ -52,7 +52,7 @@ void * __getssid(int domid, uint32_t *buflen) } memset(buf, 0, SSID_BUFFER_SIZE); getssid.interface_version = ACM_INTERFACE_VERSION; - getssid.ssidbuf = buf; + set_xen_guest_handle(getssid.ssidbuf, buf); getssid.ssidbuf_size = SSID_BUFFER_SIZE; getssid.get_ssid_by = DOMAINID; getssid.id.domainid = domid; diff --git a/xen/acm/acm_policy.c b/xen/acm/acm_policy.c index a8bd36efc0..aa640d6c81 100644 --- a/xen/acm/acm_policy.c +++ b/xen/acm/acm_policy.c @@ -32,7 +32,7 @@ #include int -acm_set_policy(void *buf, u32 buf_size, int isuserbuffer) +acm_set_policy(XEN_GUEST_HANDLE(void) buf, u32 buf_size, int isuserbuffer) { u8 *policy_buffer = NULL; struct acm_policy_buffer *pol; @@ -45,7 +45,7 @@ acm_set_policy(void *buf, u32 buf_size, int isuserbuffer) return -ENOMEM; if (isuserbuffer) { - if (copy_from_user(policy_buffer, buf, buf_size)) + if (copy_from_guest(policy_buffer, buf, buf_size)) { printk("%s: Error copying!\n",__func__); goto error_free; @@ -116,7 +116,7 @@ acm_set_policy(void *buf, u32 buf_size, int isuserbuffer) } int -acm_get_policy(void *buf, u32 buf_size) +acm_get_policy(XEN_GUEST_HANDLE(void) buf, u32 buf_size) { u8 *policy_buffer; int ret; @@ -162,7 +162,7 @@ acm_get_policy(void *buf, u32 buf_size) goto error_free_unlock; bin_pol->len = htonl(ntohl(bin_pol->len) + ret); - if (copy_to_user(buf, policy_buffer, ntohl(bin_pol->len))) + if (copy_to_guest(buf, policy_buffer, ntohl(bin_pol->len))) goto error_free_unlock; read_unlock(&acm_bin_pol_rwlock); @@ -177,7 +177,7 @@ acm_get_policy(void *buf, u32 buf_size) } int -acm_dump_statistics(void *buf, u16 buf_size) +acm_dump_statistics(XEN_GUEST_HANDLE(void) buf, u16 buf_size) { /* send stats to user space */ u8 *stats_buffer; @@ -208,7 +208,7 @@ acm_dump_statistics(void *buf, u16 buf_size) memcpy(stats_buffer, &acm_stats, sizeof(struct acm_stats_buffer)); - if (copy_to_user(buf, stats_buffer, sizeof(struct acm_stats_buffer) + len1 + len2)) + if (copy_to_guest(buf, stats_buffer, sizeof(struct acm_stats_buffer) + len1 + len2)) goto error_lock_free; read_unlock(&acm_bin_pol_rwlock); @@ -223,7 +223,7 @@ acm_dump_statistics(void *buf, u16 buf_size) int -acm_get_ssid(ssidref_t ssidref, u8 *buf, u16 buf_size) +acm_get_ssid(ssidref_t ssidref, XEN_GUEST_HANDLE(void) buf, u16 buf_size) { /* send stats to user space */ u8 *ssid_buffer; @@ -272,7 +272,7 @@ acm_get_ssid(ssidref_t ssidref, u8 *buf, u16 buf_size) acm_ssid->len += ret; acm_ssid->secondary_max_types = ret; - if (copy_to_user(buf, ssid_buffer, acm_ssid->len)) + if (copy_to_guest(buf, ssid_buffer, acm_ssid->len)) goto error_free_unlock; read_unlock(&acm_bin_pol_rwlock); diff --git a/xen/include/public/acm_ops.h b/xen/include/public/acm_ops.h index 6e7d9a7ef6..2da743cc5c 100644 --- a/xen/include/public/acm_ops.h +++ b/xen/include/public/acm_ops.h @@ -17,7 +17,7 @@ * This makes sure that old versions of acm tools will stop working in a * well-defined way (rather than crashing the machine, for instance). */ -#define ACM_INTERFACE_VERSION 0xAAAA0007 +#define ACM_INTERFACE_VERSION 0xAAAA0008 /************************************************************************/ @@ -33,7 +33,7 @@ struct acm_setpolicy { /* IN */ uint32_t interface_version; - void *pushcache; + XEN_GUEST_HANDLE(void) pushcache; uint32_t pushcache_size; }; @@ -42,7 +42,7 @@ struct acm_setpolicy { struct acm_getpolicy { /* IN */ uint32_t interface_version; - void *pullcache; + XEN_GUEST_HANDLE(void) pullcache; uint32_t pullcache_size; }; @@ -51,7 +51,7 @@ struct acm_getpolicy { struct acm_dumpstats { /* IN */ uint32_t interface_version; - void *pullcache; + XEN_GUEST_HANDLE(void) pullcache; uint32_t pullcache_size; }; @@ -61,12 +61,12 @@ enum get_type {UNSET=0, SSIDREF, DOMAINID}; struct acm_getssid { /* IN */ uint32_t interface_version; - enum get_type get_ssid_by; + uint32_t get_ssid_by; union { domaintype_t domainid; ssidref_t ssidref; } id; - void *ssidbuf; + XEN_GUEST_HANDLE(void) ssidbuf; uint32_t ssidbuf_size; }; @@ -74,8 +74,8 @@ struct acm_getssid { struct acm_getdecision { /* IN */ uint32_t interface_version; - enum get_type get_decision_by1; - enum get_type get_decision_by2; + uint32_t get_decision_by1; + uint32_t get_decision_by2; union { domaintype_t domainid; ssidref_t ssidref; @@ -84,9 +84,9 @@ struct acm_getdecision { domaintype_t domainid; ssidref_t ssidref; } id2; - enum acm_hook_type hook; + uint32_t hook; /* OUT */ - int acm_decision; + uint32_t acm_decision; }; #endif /* __XEN_PUBLIC_ACM_OPS_H__ */